#ifndef  __QUEUE_H__
#define  __QUEUE_H__
// Preuzeto iz rada Momira Djekica
class PCB;

/** 
 * @brief Node ulancane liste koja se koristi za skladistenje reda PCB-ova
 */
class Elem {
    public:
        PCB*  pcb;
        Elem* next;
};

class Queue {
    public:
        /** 
         * @brief Vraca broj elemenata u redu
         */
        int size() const;
        /** 
         * @brief Stavlja dati element u red
         * 
         * @param pcb 
         * Ako je parametar NULL ne radi nista.
         */
        void put(PCB* pcb);
        /** 
         * @brief Brise dati element iz reda
         * 
         * @param pcb 
         * Ako je parametar NULL ne radi nista.
         */
        void del(PCB* pcb);
        /** 
         * @brief Vraca element po FIFO poretku.
         * 
         * @return 
         * Vraca NULL ako nema elemenata u redu.
         */
        PCB* get();
        /** 
         * @brief Postavlja inicijalne vrednosti klasnih elemenata
         */
        Queue();
        /** 
         * @brief Brise listu.
         */
        ~Queue();
    private:
        /** 
         * @brief Pokazuje na prvi element ulancane liste. Ovo je ujedno i
         * poslednje uneti element u listi.
         */
        Elem* first;
        /** 
         * @brief Duzina ulancane liste.
         */
        int len;
};

#endif  /*__QUEUE_H__*/
